﻿using System;
using System.Collections;
using ApplicationGenerator.BusinessModule.Interfaces;

namespace ApplicationGenerator.BusinessModule.MetaElements
{
    /// <summary>
    /// Kolekcja meta właściwości w modelu
    /// </summary>
    [Serializable]
    internal class MetaFieldCollection : DictionaryBase, IMetaFieldCollection
    {
        /// <summary>
        /// Dodaje meta właściwości do kolekcji
        /// </summary>
        /// <param name="metaField"></param>
        public void Add(IMetaField metaField)
        {
            try
            {
                Dictionary.Add(metaField.FieldName, metaField);
            }
            catch
            {
                throw new ArgumentException("Nie można zarejestrować w kolekcji pól o takich samych nazwach.");
            }
        }

        /// <summary>
        /// Sprawdza, czy kolekcja zawiera meta właściwość
        /// </summary>
        /// <param name="metaFieldName">Nazwa meta właściwości</param>
        /// <returns>Czy kolekcja zawiera meta właściwość ?</returns>
        public bool Contains(string metaFieldName)
        {
            return Dictionary.Contains(metaFieldName);
        }

        /// <summary>
        /// Pobiera meta właściwość z modelu
        /// </summary>
        /// <param name="metaFieldlName">Nazwa meta właściwości</param>
        /// <returns>Meta właściwość</returns>
        public IMetaField this[string metaFieldlName]
        {
            get { return Dictionary[metaFieldlName] as IMetaField; }
        }

        #region IEnumerable Members

        /// <summary>
        /// Pobiera enumerator dla meta właściwości
        /// </summary>
        /// <returns></returns>
        public new IEnumerator GetEnumerator()
        {
            return Dictionary.Values.GetEnumerator();
        }

        #endregion
    }
}
